package main

import (
	"fmt"
	"unsafe"
)

// Go中整数类型的使用
func main() {
	var i int = 1
	fmt.Println("i=", i)

	// 测试一下int8的范围	-128~127
	// var j int8 = -129		// constant 128 overflows int8
	// var j int8 = 128		// constant 128 overflows int8
	// 其他的int16 int32 int64类型类推
	var j int8 = 127
	fmt.Println("j=", j)

	// 测试一下uint8的范围	0~255
	// 其他的uint16 uint32 uint64类型类推
	var k uint8 = 127
	fmt.Println("k=", k)

	// int uint rune byte的使用
	var a int = 8890
	fmt.Println("a=", a)

	var b uint = 1
	fmt.Println("b=", b)

	var c byte = 255
	fmt.Println("c=", c)

	// 整型的使用细节
	var n1 = 100 // n1 是什么类型
	// 这里我们给介绍一下如何查看某个变量的数据类型
	// fmt.Printf()	可以用于做格式化输出
	fmt.Printf("n1 的 类型 %T \n ", n1)

	// 如何在程序查看某个变量的字节大小和数据类型（使用较多）
	var n2 int64 = 10
	fmt.Printf("n2 的 类型 %T n2占用的字节数是 %d \n ", n2, unsafe.Sizeof(n2))

	// Golang程序中整型变量在使用时，遵守保小不保大的原则，
	// 即：在保证程序正确运行下，尽量使用占用空间小的数据类型。【如：年龄】
	// var age int = 200		// 太大
	var age byte = 200 // 差不多
	fmt.Println("age= ", age)
}
